"""
管理员帐户管理视图函数
功能：实现管理员的增删改查
"""
from django.shortcuts import render, redirect
from app.models import Admin  # 数据表类
from app.utils.form import AdminForm, AdminEditForm, AdminResetForm
from app.utils.pagination import Pagination
from app.utils.encrypt import md5


def admin_list(request):
    """
    部门列表
    """

    # 第一次显示的时候，查询条件也就是data_dict为空，所以查询所有数据
    data_dict = {}
    search_data = request.GET.get('searchMobile', '')
    if search_data:
        data_dict['username__contains'] = search_data

    queryset = Admin.objects.filter(**data_dict)

    page_object = Pagination(request, queryset, PAGE_SIZE=10)  # 实例化分页导航条类,每页显示10条记录
    page_queryset = page_object.page_queryset  # 获得分完页的数据结果

    # 生成分页导航条
    page_nav = page_object.html()
    context = {
        'queryset': page_queryset,  # 分完页的数据结果
        'page_nav': page_nav,  # 生成的页码导航条
        'search_data': search_data,  # 把查询值再返回给前端
    }

    return render(request, 'admin_list.html', context)


def admin_add(request):
    """
    添加管理员
    """
    title = '新建管理员帐户'

    if request.method == 'GET':
        form = AdminForm()
        return render(request, 'change.html', {'form': form, 'title': title})

    # POST请求
    form = AdminForm(data=request.POST)  # 拿到所有提交过来的数据
    if form.is_valid():
        # print(form.cleaned_data)  # 验证通过后，所有数据都在form.cleaned_data
        form.save()
        return redirect('/admin/list')

    else:
        return render(request, 'change.html', {'form': form, 'title': title})


def admin_edit(request, nid):
    """
    管理员帐户修改
    nid 用于接收前端传递过来的id,他的名字要和urls.py文件中定义的一样
    """
    # 查询是否存在nid的帐户返回  对象/None
    row_data = Admin.objects.filter(id=nid).first()
    if not row_data:
        url = '/admin/list'
        return render(request, 'error.html', {'msg': '数据不存在', 'url': url})

    title = '编辑管理员帐户'

    if request.method == 'GET':
        form = AdminEditForm(instance=row_data)  # 将查询到的对象传递给form
        return render(request, 'change.html', {'form': form, 'title': title})
        # return render(request,'change.html',{'title':title})

    # POST请求
    form = AdminEditForm(data=request.POST, instance=row_data)  # 拿到所有提交过来的数据
    if form.is_valid():  # 数据校验
        form.save()  # 向 model = UserInfo 定义的表保存数据
        return redirect('/admin/list/')
    else:
        # form中带了POST过来的请求
        return render(request, 'change.html', {'form': form, 'title': title})


def admin_delete(request, nid):
    """
    管理员帐户删除
    nid 用于接收前端传递过来的id,他的名字要和urls.py文件中定义的一样
    """
    Admin.objects.filter(id=nid).delete()
    return redirect('/admin/list/')


def admin_reset_password(request, nid):
    """
    重置管理员密码
    """
    # 方式1，直接修改为0000
    # Admin.objects.filter(id=nid).update(password=md5('0000'))
    # return redirect('/admin/list/')

    # 方式2，通过表单输入重置
    row_data = Admin.objects.filter(id=nid).first()

    if not row_data:
        return redirect('/admin/list/')

    title = f'重置密码-{row_data.username}'
    if request.method == 'GET':
        form = AdminResetForm()
        return render(request, 'change.html', {'form': form, 'title': title})

    # POST
    form = AdminResetForm(data=request.POST, instance=row_data)  # 拿到所有提交过来的数据
    if form.is_valid():  # 数据校验
        form.save()  # 向 model = UserInfo 定义的表保存数据
        return redirect('/admin/list/')
    else:
        # form中带了POST过来的请求
        return render(request, 'change.html', {'form': form, 'title': title})
